# config.py
# 存放全局配置，如数据库、环境变量等

# app/core/config.py

from pydantic_settings import BaseSettings
from typing import List

# 定义一个配置模型类，它继承自 pydantic_settings 的 BaseSettings
class Settings(BaseSettings):
    # --- Project ---
    # 它会自动读取 .env 文件中同名的大写变量
    # 如果 .env 中没有，则使用这里的默认值
    PROJECT_NAME: str = "fastapi-template"
    DEBUG: bool = True
    VERSION: str = "0.0.1"

    # --- CORS ---
    # 对于复杂的类型如列表，可以直接定义
    ALLOWED_HOSTS: List[str] = ["*"]
    ALLOWED_METHODS: List[str] = ["*"]
    ALLOWED_HEADERS: List[str] = ["*"]

    # --- Database ---
    # 这里没有给默认值，意味着如果 .env 中没有提供 DATABASE_URL，程序启动时会直接报错
    # 这是一种很好的“快速失败”策略，可以防止在缺少关键配置时启动服务
    DATABASE_URL: str

    # --- JWT ---
    SECRET_KEY: str # 同理，密钥是必需的
    ALGORITHM: str = "HS256"

    # --- Redis ---
    # REDIS_URI: str = "redis://localhost:6379/0"

    # --- Scheduler ---
    SCHEDULER_USE: bool = False # 是否启用定时任务调度器

    class Config:
        # 这个内部类告诉 Pydantic 从 .env 文件中加载配置
        env_file = ".env"
        env_file_encoding = "utf-8"

# 创建一个全局唯一的 settings 实例，在项目的其他地方都可以导入和使用它
settings = Settings()